package com.gradumate.server.alfresco;

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.AccessControlException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.xml.namespace.QName;

import org.apache.abdera.Abdera;
import org.apache.abdera.model.Content;
import org.apache.abdera.model.Document;
import org.apache.abdera.model.Element;
import org.apache.abdera.model.Entry;
import org.apache.abdera.model.ExtensibleElement;
import org.apache.abdera.model.Feed;
import org.apache.abdera.parser.Parser;
import org.apache.commons.httpclient.URI;
import org.apache.commons.httpclient.URIException;

import com.google.gwt.user.server.rpc.UnexpectedException;
import com.gradumate.server.AlfrescoInfo;
import com.gradumate.server.LoginTokenGenerator;
import com.gradumate.server.MailCommunicator;
import com.gradumate.server.dao.Gebruiker_DAO;
import com.gradumate.server.service.GraduMateServer;
import com.gradumate.shared.ContentDocument;
import com.gradumate.shared.ContentItem;
import com.gradumate.shared.Gebruiker;
import com.gradumate.shared.LoginToken;

/**
 * @author IJsbrand
 * 
 */
public class ContentBeheer {

	// Logger
	private static final Logger log = Logger.getLogger(ContentBeheer.class.getName());

	// GebruikerDS
	private Gebruiker_DAO gebruikerDAO = new Gebruiker_DAO();

	/**
	 * Adds the document. Functie om een document aan een bepaald pad toe te
	 * voegen
	 * 
	 * @param pad
	 *            de map van de content
	 * @param doc
	 *            contentdocument
	 * @return string met OK of ERROR
	 */
	public String addDocument(ContentDocument doc, String email) {
		System.out.println("content:" + doc.getContent());

		// verkrijgen abdera object
		Abdera abdera = AlfrescoInfo.getAbderaInstance();

		// opbouwen van de entry
		Entry entry = abdera.newEntry();

		// toevoegen namespaces (zou eigenlijk niet hoeven...)
		entry.declareNS(AlfrescoInfo.NS_CMIS_CORE, AlfrescoInfo.CMIS);
		entry.declareNS(AlfrescoInfo.NS_CMIS_RESTATOM, AlfrescoInfo.CMISRA);

		// overnemen ingegeven gegevens
		entry.setTitle("Afstudeervoorstel");
		entry.setSummary(doc.getSummary());

		// plaats de content
		Content content = entry.setContent(doc.getContent());
		content.setAttributeValue("type", doc.getMimetype());

		// toevoegen properties aan de entry, verplicht is objectTypeId
		ExtensibleElement objElement = (ExtensibleElement) entry.addExtension(AlfrescoInfo.CMISRAName("object"));
		ExtensibleElement propsElement = objElement.addExtension(AlfrescoInfo.CMISName("properties"));
		ExtensibleElement stringElement = propsElement.addExtension(AlfrescoInfo.CMISName("propertyId"));
		stringElement.setAttributeValue("propertyDefinitionId", "cmis:objectTypeId");
		Element valueElement = stringElement.addExtension(AlfrescoInfo .CMISName("value"));
		valueElement.setText("" + doc.getType());

		String result = "OK";

		try {
			// huidige gebruiker ophalen
			GraduMateServer service = new GraduMateServer();
			Gebruiker student = service.getGebruikerByEmail(email);

			// URL opbouwen
			String strurl = AlfrescoInfo.MY_ALFRESO
			+ "/s/cmis/p/sites/" + student.getFaculteit().toLowerCase() + "/documentLibrary/"
			+ student.getInstituut() + "/" 
			+ student.getOpleiding().get(0).replace("[", "").replace("]", "") + "/"
			+ student.getInschrijfjaar() + "/" + student.getGebruikerEmail() + "/Concept/children?alf_ticket="
			+ student.getTicket(); 

			// URL object aanmaken
			URL url = new URL(encodeUrl(strurl));

			// Contenttype en Acccept setten
			String c = "application/atom+xml";
			String a = "application/atom+xml";

			// Verzenden naar Alfresco
			sendToAlfresco(url, "POST", entry, abdera, c, a, null);

			// De studieadviseur(s) bepalen van de Student
			ArrayList<Gebruiker> studieadviseurs = gebruikerDAO.getStudieAdviseurByFaculteitInstituutAndOpleiding(student.getFaculteit(), student.getInstituut(), student.getOpleiding().get(0));
			if (studieadviseurs != null && studieadviseurs.size() > 0) {
				for (Gebruiker studieadviseur : studieadviseurs) {
					// Wanneer de studieadvieur email wilt ontvangne door gaan.
					if (studieadviseur.isMailOntvangen()) {
						// LoginToken aanmaken en versturen naar de studieadviseur
						LoginToken lt = LoginTokenGenerator.getLoginToken(studieadviseur, student, 2);
						MailCommunicator.sendAfstudeerVerzoekBeoordelenEmail(lt, studieadviseur);
					}
				}
			}

		} catch (MalformedURLException e) {
			e.printStackTrace();
			log.info("MalformedURLException: " + e.getMessage());
		} catch (AccessControlException e) {
			e.printStackTrace();
			log.info("AccessControlException: " + e.getMessage());
		}
		return result;
	}

	/**
	 * Haalt een lijst met Contentitem's op!
	 * 
	 * @return ArrayList<Contentitem>
	 */
	public ArrayList<ContentItem> getSiteContent(String site,
			String subFolder) {

		ArrayList<ContentItem> contentitems = new ArrayList<ContentItem>();

		// Abdera instantieobject en parser
		Abdera abdera = AlfrescoInfo.getAbderaInstance();
		Parser parser = abdera.getParser();

		try {
			// Admin ticket vernieuwen
			AlfrescoInfo.replaceAdminTicket();

			// HTTP van de Alfresco website URL opbouwen
			String strUrl = AlfrescoInfo.MY_ALFRESO + "/s/cmis/p/sites/" + site
			+ "/documentLibrary/" + subFolder + "/children"
			+ AlfrescoInfo.MY_TICKET;
			URL url = new URL(encodeUrl(strUrl));
			log.info("Fetching CMIS from: " + url.toString());

			// Inhoude remote ophalen en in doc zetten.
			Document<Feed> doc = parser.parse(url.openStream(), url.toString());

			// Feed
			Feed feed = doc.getRoot();
			// log.info("Feed: " + feed.getTitle());

			for (Entry entry : feed.getEntries()) {

				// add van het contentitem tbv display in de jsp
				ContentItem f = new ContentItem();
				f.setTitle(entry.getTitle());
				f.setSummary(entry.getSummary());
				f.setBasPath(entry.getBaseUri().getPath());
				log.info(f.toString());

				// Filter ObjectTypeId en baseTypeId uit de cmis properties
				String basetype = "";
				String objecttype = "";
				String contentID = "";

				// tag: <cmisra:object>
				ExtensibleElement cObject = entry.getExtension(AlfrescoInfo.CMISRAName("object"));
				if (cObject != null) {
					// tag: <cmis:properties>
					ExtensibleElement cProps = cObject.getExtension(AlfrescoInfo.CMISName("properties"));
					if (cProps != null) {
						// lijst van alle properties onder <cmis:properties>
						List<Element> cPropIds = cProps.getElements();
						for (Element ele : cPropIds) {
							// bepalen of de propertie van het type
							// propertyId is
							QName qPropId = AlfrescoInfo.CMISName("propertyId");
							if (qPropId.equals(ele.getQName())) {
								// bepalen van de waarde van de
								// propertyDefinitionId
								String strPId = ele.getAttributeValue("propertyDefinitionId");
								if (strPId.equals("cmis:objectId")) {
									// verwerking voor objectId
									// bepalen van de <cmis:value> tag
									Element evalue = ((ExtensibleElement) ele).getExtension(AlfrescoInfo.CMISName("value"));
									if (evalue != null) {
										contentID = evalue.getText();
									}
								}
								if (strPId.equals("cmis:baseTypeId")) {
									// verwerking voor baseTypeID
									// bepalen van de <cmis:value> tag
									Element evalue = ((ExtensibleElement) ele).getExtension(AlfrescoInfo.CMISName("value"));
									if (evalue != null) {
										basetype = evalue.getText();
									}
								}

								if (strPId.equals("cmis:objectTypeId")) {
									// verwerking voor objectTypeID
									// bepalen van de <cmis:value> tag
									Element evalue = ((ExtensibleElement) ele)
									.getExtension(AlfrescoInfo
											.CMISName("value"));
									if (evalue != null) {
										objecttype = evalue.getText();
									}
								}// objecttype
							}// propertyId
						}// for
					}// cprops present
				}// object present

				f.setBase(basetype);
				f.setType(objecttype);
				f.setContentID(contentID);

				contentitems.add(f);
			}
		} catch (MalformedURLException mue) {
			log.info(mue.getMessage());
		} catch (IOException e) {
			log.info(e.getMessage());
		} catch (UnexpectedException e) {
			log.info(e.getMessage()); 
		}

		return contentitems;
	}

	@SuppressWarnings("deprecation")
	/**
	 * Omdat ik de spaties niet vervangen kreeg met regex voor %20 tekens heb ik deze functie gebruikt.
	 * 
	 * @param String url die encode moet worden
	 * @return String encoded url.
	 */
	private String encodeUrl(String url) {

		URI strUriIn = null;
		URI strUriOut = null;
		try {
			strUriIn = new URI(url);
			strUriOut = new URI(
					strUriIn.getScheme(), 
					null, 
					strUriIn.getHost(),
					strUriIn.getPort(), 
					strUriIn.getPath(),
					strUriIn.getQuery(), 
					strUriIn.getFragment());
		} catch (URIException e) {
			log.info("Kon URL niet opbouwen: " + e.getMessage());
		}
		return strUriOut.getEscapedURI();
	}


	/**
	 * Methode die de een student toevoegd in Alfresco
	 * @param g
	 * @return true wanneer de student succesvol is toegevoegd aan Alfresco <br/>
	 * 			false wanneer de student niet is toegevoegd aan Alfresco
	 */
	public boolean addAlfrescoStudent(Gebruiker g){
		boolean result = false;
		// Vullen van het JSON bericht voor toevoegen van een site
		String json = "{\"userName\" : \""+ g.getGebruikerEmail() +"\"," +
		"\"firstName\" : \""   + g.getVoornaam()       + "\"," + 
		"\"lastName\" : \""    + g.getAchternaam()     + "\"," + 
		"\"enabled\" : \""     + "true"                + "\"," +
		"\"password\" : \""    + g.getVoornaam().toLowerCase() + g.getAchternaam().toLowerCase().replace(" ", "") + g.getInschrijfjaar() + "\"," + 
		"\"email\" : \""       + g.getGebruikerEmail() + "\" }";

		try
		{
			// Admin ticket vernieuwen
			AlfrescoInfo.replaceAdminTicket();

			// URL opbouwen
			URL url = new URL( encodeUrl(AlfrescoInfo.MY_ALFRESO +"/service/api/people" + AlfrescoInfo.MY_TICKET));			

			// Contenttype & accept maken
			String c = "application/json";
			String a = "application/json";

			// Alles naar Alfresco opsturen
			sendToAlfresco(url, "POST", null, null, c, a, json);

		} catch (MalformedURLException e) {
			e.printStackTrace();
		} finally {
			result = true;
			this.addMappenStudent(g);
		}
		return result;	
	}

	/**
	 * Methode die de standaard mapstructuur voor de student aanmaakt in Alfresco
	 * @param g Gebruiker object van in dit geval de student
	 */
	public void addMappenStudent(Gebruiker g){
		// Admin ticket vernieuwe
		AlfrescoInfo.replaceAdminTicket();

		Abdera abdera = AlfrescoInfo.getAbderaInstance();

		Entry entry = abdera.newEntry();
		entry.declareNS(AlfrescoInfo.NS_CMIS_CORE, "cmis");
		entry.declareNS(AlfrescoInfo.NS_CMIS_RESTATOM, "cmisra");

		// toevoegen properties aan de entry, verplicht is objectTypeId
		ExtensibleElement objElement = (ExtensibleElement) entry.addExtension(AlfrescoInfo.CMISRAName("object"));
		ExtensibleElement propsElement = objElement.addExtension(AlfrescoInfo.CMISName("properties"));
		ExtensibleElement stringElement = propsElement.addExtension(AlfrescoInfo.CMISName("propertyId"));
		stringElement.setAttributeValue("propertyDefinitionId", "cmis:objectTypeId");
		Element valueElement = stringElement.addExtension(AlfrescoInfo.CMISName("value"));
		valueElement.setText("cmis:folder");
		String strurl = "";
		for(int i=1; i<6; i++){
			// URL opbouwen

			//Bepalen wat de naam van de map moet zijn
			if(i==1){
				entry.setTitle(g.getGebruikerEmail());
				strurl = AlfrescoInfo.MY_ALFRESO + "/s/cmis/p"+ "/sites/fnt/documentLibrary/" 
				+ g.getInstituut() + "/" 
				+ g.getOpleiding().get(0) + "/" 
				+ g.getInschrijfjaar() + "/children" + AlfrescoInfo.MY_TICKET;
			}
			if(i==2){
				entry.setTitle("Concept");
				strurl = AlfrescoInfo.MY_ALFRESO + "/s/cmis/p"+ "/sites/fnt/documentLibrary/" 
				+ g.getInstituut()  + "/" 
				+ g.getOpleiding().get(0) + "/" 
				+ g.getInschrijfjaar() + "/" 
				+ g.getGebruikerEmail() +  "/children" + AlfrescoInfo.MY_TICKET;
			}
			if(i==3){
				entry.setTitle("In behandeling");
				strurl = AlfrescoInfo.MY_ALFRESO + "/s/cmis/p"+ "/sites/fnt/documentLibrary/" 
				+ g.getInstituut() + "/" 
				+ g.getOpleiding().get(0) + "/" 
				+ g.getInschrijfjaar() + "/" 
				+ g.getGebruikerEmail() +  "/children" + AlfrescoInfo.MY_TICKET;
			}
			if(i==4){
				entry.setTitle("Goedgekeurd");
				strurl = AlfrescoInfo.MY_ALFRESO + "/s/cmis/p"+ "/sites/fnt/documentLibrary/" 
				+ g.getInstituut()+ "/" 
				+ g.getOpleiding().get(0)+ "/" 
				+ g.getInschrijfjaar() + "/" 
				+ g.getGebruikerEmail() +  "/children" + AlfrescoInfo.MY_TICKET;
			}
			if(i==5){
				entry.setTitle("Afgekeurd");
				strurl = AlfrescoInfo.MY_ALFRESO + "/s/cmis/p"+ "/sites/fnt/documentLibrary/" 
				+ g.getInstituut() + "/" 
				+ g.getOpleiding().get(0) + "/" 
				+ g.getInschrijfjaar() + "/" 
				+ g.getGebruikerEmail() +  "/children" + AlfrescoInfo.MY_TICKET;
			}
			try
			{	
				// URL object aanmaken
				URL url = new URL(encodeUrl(strurl));

				// Contenttype & accept maken
				String c = "application/atom+xml";
				String a = "application/atom+xml";

				// Alles naar Alfresco opsturen
				sendToAlfresco(url, "POST", entry, abdera, c, a, null);

			} catch (MalformedURLException e) {
				e.printStackTrace();
			} 
		}
		addStudentAanMappen(g);
	}

	/**
	 * Methode die de student toevoegt aan de gebruikersgroep van de student
	 * @param g Het gebruiker object van de student.
	 */
	private void addStudentAanMappen(Gebruiker g) {
		try
		{
			// Admin ticket vernieuwe
			AlfrescoInfo.replaceAdminTicket();

			// URL opbouwen
			URL url = new URL(encodeUrl(AlfrescoInfo.MY_ALFRESO +"/service/api/groups/studenten_fnt_ie_" + g.getInschrijfjaar() + "/children/" + g.getGebruikerEmail() + AlfrescoInfo.MY_TICKET));
			log.info("URL om user toe te voegen: "+ url);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			// POST method zetten 
			conn.setRequestMethod("POST");

			// controleer de status code
			if (conn.getResponseCode() != 200) {
				// geen 200 dan fout melden !
				throw new IOException("Response code="+conn.getResponseCode());
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
		}
	}

	/**
	 * Methode die de beschrijving van het afstudeervoorstel in Alfresco veranderd waardoor een Regel/Rule uitgevoerd<br/>
	 * zal worden in Alfresco die het document verplaatst naar de map 'Goedgekeurd' of 'Afgekeurd'.
	 * @param student Gebruiker opject van de student waarvan het afstudeervoorstel verplaatst moet worden.
	 * @param beoordeling De status van het docuement, of het is goedgekeurd (true) of afgekeurd (false)
	 * @param String motivatie, wanneer het voorstel afgekeurd word moet deze worden voorzien van een motivatie.
	 */
	public void verplaatsAfstudeerVoorstel(Gebruiker student, boolean beoordeling, String motivatie) {
		moveAfstudeerVoorstel(student, beoordeling, motivatie, "In behandeling", "Goedgekeurd");
	}

	/**
	 * Methode die de beschrijving van het afstudeeverzoek in Alfresco veranderd waardoor een Regel/Rule uitgevoerd<br/>
	 * zal worden in Alfresco die het document verplaatst naar de map 'Goedgekeurd' of 'Afgekeurd'.
	 * @param student Gebruiker opject van de student waarvan het afstudeerverzoek verplaatst moet worden.
	 * @param beoordeling De status van het docuement, of het is goedgekeurd (true) of afgekeurd (false)
	 */
	public void verplaatsAfstudeerVerzoek(Gebruiker student, boolean beoordeling) {
		moveAfstudeerVoorstel(student, beoordeling, null, "Concept", "In behandeling");
	}

	/**
	 * Verplaatst het afstudeervoorstel in Alfresco.
	 *
	 * @param Gebruiker student waarvan het voorstel behandeld word
	 * @param Boolean beoordeling true = goedgekeurd/false = afgekeurd
	 * @param String motivatie waarom word het document afgekeurd.
	 * @param String source waar staat afstudeervoorstel zich nu bevind
	 * @param String destination waar het afstudeervoorstle heen gaat.
	 */
	private void moveAfstudeerVoorstel(Gebruiker student, boolean beoordeling, String motivatie, String source, String destination) {	
		Abdera abdera = AlfrescoInfo.getAbderaInstance();

		Entry entry = abdera.newEntry();
		entry.declareNS(AlfrescoInfo.NS_CMIS_CORE, "cmis");
		entry.declareNS(AlfrescoInfo.NS_CMIS_RESTATOM, "cmisra");

		// overnemen ingegeven gegevens
		//entry.setTitle(doc.getTitle());

		//TODO summary wordt motivatie wanneer beoordeling false is
		if (motivatie != null && !beoordeling) {
			entry.setSummary(motivatie); 
			destination = "Afgekeurd";
		}

		//Content c = entry.setContent(doc.getContent());
		//c.setAttributeValue("type", doc.getMimetype());

		// toevoegen properties aan de entry, verplicht is objectTypeId
		ExtensibleElement objElement = (ExtensibleElement) entry.addExtension(AlfrescoInfo.CMISRAName("object"));
		ExtensibleElement propsElement = objElement.addExtension(AlfrescoInfo.CMISName("properties"));
		ExtensibleElement stringElement = propsElement.addExtension(AlfrescoInfo.CMISName("propertyId"));
		stringElement.setAttributeValue("propertyDefinitionId", "cmis:objectId");
		Element valueElement = stringElement.addExtension(AlfrescoInfo.CMISName("value"));
		valueElement.setText(student.getAfstudeervoorstelItemID());

		// Mappen van de student ophalen.
		ArrayList<ContentItem> contentitems = this.getSiteContent(student.getFaculteit(), student.getInstituut()+"/"
				+  student.getOpleiding().get(0).replace("[", "").replace("]", "") + "/"
				+  student.getInschrijfjaar() + "/"
				+  student.getGebruikerEmail());

		String sourceId = null;

		// SpaceID uit de source map halen.
		for (ContentItem contentitem : contentitems) {
			if (contentitem.getTitle().equals(source)) {
				sourceId = contentitem.getContentID();
			}
		}

		// Source en Destination mogen niet null zijn.
		if (sourceId != null && destination != null) {		
			try {	
				AlfrescoInfo.replaceAdminTicket();
				// URL opbouwen
				URL url = new URL(encodeUrl(AlfrescoInfo.MY_ALFRESO + "/s/cmis/p/sites/" 
						+  student.getFaculteit() + "/documentLibrary/"
						+  student.getInstituut() + "/"
						+  student.getOpleiding().get(0).replace("[", "").replace("]", "") + "/"
						+  student.getInschrijfjaar() + "/"
						+  student.getGebruikerEmail() + "/" + destination + "/children?sourceFolderId="  
						+  sourceId + "&" + AlfrescoInfo.MY_TICKET.replace("?", "")));

				// Contenttype & accept maken
				String c = "application/atom+xml";
				String a = "application/atom+xml";

				// Alles naar Alfresco opsturen
				sendToAlfresco(url, "POST", entry, abdera, c, a, null);	

			} catch (MalformedURLException e) {
				e.printStackTrace();
				log.info("MalformedURLException: " + e.getMessage());
			}
		}
	}

	/**
	 * Verstuurt een opdracht naar de Alfreso server. Dit kan in ATOM/XML of JSON.
	 * @param URL urlIn de URL die moet worden aangeroepen
	 * @param String connRequestMethod wat voor soort requestmethod; POST/GET/PUT
	 * @param Entry entry eventueel aangemaakte entries
	 * @param Abdera abdera instance
	 * @param String contenttype wat voor contenttype is het (application/atom+xml of application/json)
	 * @param String accept zelfde als contenttype
	 * @param String json eventuele json call
	 */
	private void sendToAlfresco(URL urlIn, String connRequestMethod, Entry entry, Abdera abdera, String contenttype, String accept, String json) {

		log.info("URL verzoek: " + urlIn.toString());

		try {

			HttpURLConnection conn = (HttpURLConnection) urlIn.openConnection();
			// instellingen goed zetten 
			conn.setRequestMethod(connRequestMethod); // POST method zetten
			conn.setDoOutput(true);  // opsturen JSON
			conn.setDoInput(true); 	 // eventueel de output kunnen opvangen
			conn.setUseCaches(false);
			conn.setAllowUserInteraction(false);

			// Header informatie zetten
			conn.setRequestProperty("Content-Type", contenttype);
			conn.setRequestProperty("Accept", accept);

			// Output naar MY_ALFRESCO
			OutputStream out = conn.getOutputStream();
			// Maak een writer die een entry om kan zetten naar ATOM-xml
			if (abdera != null && entry != null) {
				org.apache.abdera.writer.Writer writer = abdera.getWriterFactory().getWriter();
				writer.writeTo(entry, out);
			} else if (json != null) {
				Writer writer = new OutputStreamWriter(out);
				// opsturen van het JSON
				writer.write(json);
				writer.close();
			}

			// sluiten
			out.close();

			log.info("get response message: " + conn.getResponseMessage());
			log.info("get response message: " + conn.getResponseCode() + "");

			// controleer de status code
			if (conn.getResponseCode() != 201 && conn.getResponseCode() != 200) {
				// geen 201 dan fout melden !
				throw new IOException("Unexpected Response code="+conn.getResponseCode());
			}

		} catch (MalformedURLException e) {
			e.printStackTrace();
			log.info("MalformedURLException: " + e.getMessage());
		} catch (IOException e) {
			e.printStackTrace();
			log.info("IOException: " + e.getMessage());
		} catch (AccessControlException e) {
			e.printStackTrace();
			log.info("AccessControlException: " + e.getMessage());
		}
	}

	/**
	 * Methode die een url maakt die vervolgens teruggegeven wordt aan de gui/frontend. 
	 * @param student Het object van de student. Dit is nodig om de SpacesStore ID op te halen uit de datastore
	 * @return
	 */
	public String openDocument(Gebruiker student) {
		AlfrescoInfo.replaceAdminTicket();
		String url = "http://alfresco.hugozonderland.nl:8080/share/proxy/alfresco/api/node/content/workspace/SpacesStore/" + student.getAfstudeervoorstelItemID().replace("workspace://SpacesStore/", "") 
		+ "/Afstudeervoorstel" + AlfrescoInfo.MY_TICKET;
		System.out.println(url);
		return url;
	}
	/**
	 * Methode die een url maakt die vervolgens teruggegeven wordt aan de gui/frontend. 
	 * @param student Het object van de student. Dit is nodig om de SpacesStore ID op te halen uit de datastore
	 * @return
	 */
	public String toonVoortgang() {
		AlfrescoInfo.replaceAdminTicket();
		String url = "http://alfresco.hugozonderland.nl:8080/share/proxy/alfresco/api/node/content/workspace/SpacesStore/9b319e0e-45bf-4311-a1e3-18f938aa3608"  
		+ "/7918181" + AlfrescoInfo.MY_TICKET;
		System.out.println(url);
		return url;
	}
}
